<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div class="btns">
        <!-- 让每一个按钮都携带当前在路由表的路由地址 -->
        <button data-path="/home">首页</button>
        <button data-path="/news">新闻</button>
        <button data-path="/music">音乐</button>
    </div>
    <div id="content"></div>

    <script>
        const oContent = document.getElementById("content");
        // 想要做一个路由器，首先必须要拥有一个路由器
        const routes = [
            { path: "/home", component: "我是一个首页" },
            { path: "/news", component: "我是一个新闻" },
            { path: "/music", component: "我是一首新歌" },
        ];

        // 获取所有的按钮绑定点击事件
        const oBtns = document.querySelectorAll(".btns button");
        oBtns.forEach((item) => {
            // 给每一个按钮绑定点击事件，点击以后改变地址的hash值
            // 改变地址可以留下历史记录，使用hash是因为hash地址的改变不会刷新页面
            item.onclick = function () {
                // 使用location。hash可以改变hash地址
                location.hash = this.dataset.path;
            };
        });

        // 监听hash地址的改变，然后根据当前的hash地址和路由表对比。展示内容
        window.onhashchange = function (e) {
            console.log(e);
            // 拿到最新的hash值
            const newHash = e.newURL.split("#")[1];
            // 去路由表判断，看哪一个路由视图符合条件，展示视图
            routes.forEach((item) => {
                if (item.path === newHash) {
                    oContent.innerHTML - item.component;
                }
            });
        };
    </script>
</body>

</html>